/*

* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     Smart-Shop开源商城系统/ Java商城-首选电商平台系统 请务必保留此注释头信息
* |     开源地址: https://gitee.com/ningbo-qishan/gruul-mall
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     可正常分享和学习源码,未经授权 不可商用！
* |     商业版中台购买/开源版商业授权 联系技术客服
* |     官网:  https://www.73app.cn/
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     Copyright (c) 2016-2999 宁波启山智软科技有限公司
* |     版权所有 ,侵权必究！
* ------------------------------------------------------------------------

*/
package com.medusa.gruul.account.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.medusa.gruul.account.api.entity.MemberInfo;
import com.medusa.gruul.account.model.dto.*;
import com.medusa.gruul.account.model.vo.MemberInnerListVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 会员信息表 Mapper 接口
 *
 * @author zhaokw
 * @since 2020-05-01
 */
public interface MemberInfoMapper extends BaseMapper<MemberInfo> {
    /**
     * PC端获取会员列表
     *
     * @param memberListDtoPage 分页数据
     * @param paramMap          查询条件参数
     * @return com.medusa.gruul.account.model.dto.UserListDto
     */
    IPage<MemberListDto> selectByMemberList(Page<MemberListDto> memberListDtoPage, @Param("paramMap") Map<String, Object> paramMap);

    /**
     * PC端会员续费
     *
     * @param updateMemberExpireTimeDto 会员续费参数
     * @return int
     */
    int updateMemberExpireTime(@Param("updateMemberExpireTimeDto") UpdateMemberExpireTimeDto updateMemberExpireTimeDto);

    /**
     * 小程序端会员续费
     *
     * @param updateApiMemberExpireTimeDto 会员续费参数
     * @return int
     */
    int updateApiMemberExpireTime(@Param("updateApiMemberExpireTimeDto") UpdateApiMemberExpireTimeDto updateApiMemberExpireTimeDto);

    /**
     * PC端会员升级
     *
     * @param upgradeMemberRankDto 会员升级参数
     * @return int
     */
    int upgradeMemberRank(@Param("upgradeMemberRankDto") UpgradeMemberRankDto upgradeMemberRankDto);

    /**
     * 获取过期时间小于当前系统时间
     *
     * @return com.medusa.gruul.account.api.entity.MemberInfo
     **/
    List<MemberInfo> getExpireMemberInfo();

    /**
     * 获取指定用户的所有会员卡
     *
     * @param tenantId   租户id
     * @param shopUserId 用户店铺id
     * @return com.medusa.gruul.account.api.entity.MemberInfo
     */
    List<MemberInfo> getMemberInfoByUserId(@Param("tenantId") String tenantId, @Param("shopUserId") String shopUserId);

    /**
     * 更新会员注册时间
     *
     * @param memberInfo 会员信息
     * @return 0 or 1
     */
    int updateRegisterData(@Param("memberInfo") MemberInfo memberInfo);

    /**
     * 小程序会员升级
     *
     * @param upgradeApiMemberRankDto 会员升级参数
     * @return int
     */
    int upgradeApiMemberRank(@Param("upgradeApiMemberRankDto") UpgradeApiMemberRankDto upgradeApiMemberRankDto);

    /**
     * 获取指定等级会员卡数量
     *
     * @param tenantId 租户id
     * @param rankCode 等级代码
     * @return 数量
     */
    int getCountByRankCode(@Param("tenantId") String tenantId, @Param("rankCode") String rankCode);

    /**
     * PC端获取会员记录
     *
     * @param memberListDtoPage 分页数据
     * @param paramMap          查询条件参数
     * @return com.medusa.gruul.account.model.dto.UserListDto
     */
    IPage<MemberInnerListVo> getMemberRecord(Page<MemberInnerListVo> memberListDtoPage, @Param("paramMap") Map<String, Object> paramMap);
}
